import QtQuick 1.0
import "../Util/Util.js" as Util


ModelXmlList {
//    id: _root

    property bool accessReady: true     //上位で読込みに関するReady状態を指定する
    property bool isReady: ready && accessReady    //状態の合成（最終的にこれを見る）

    property bool ready: status == XmlListModel.Ready
    property int pageNumber: 1

    property int sourceType: 0              //取得するデータの種類    0:timeline 1:mention
    property string sourceTimeline: ""      //Timeline用

    property string startStatusId: ""       //表示の頭になるID
    property string prevStartStatusId: ""   //全開の先頭ID
    property int inReplyCount: -1            //取得に行く回数のカウント
    property int inReplyCountMax: 4         //取得に行く回数の最大値
    property bool hasMoreItem: true         // 次も取得するアイテムがあるか

    property variant objTwitter: null       // TwitterAPIアクセス用エレメント

    //xmlの解析関係
    query: "/status"
    XmlRole { name: "_status_id"; query: "id/string()"; isKey: true}
    XmlRole { name: "_name"; query: "user/name/string()"; }
    XmlRole { name: "_screen_name"; query: "user/screen_name/string()"; }
    XmlRole { name: "_text"; query: "text/string()"; }
    XmlRole { name: "_icon"; query: "user/profile_image_url/string()";}
    XmlRole { name: "_date"; query: "created_at/string()"; }
    XmlRole { name: "_in_reply_to_status_id"; query: "in_reply_to_status_id/string()"; }
    XmlRole { name: "_in_reply_to_screen_name"; query: "in_reply_to_screen_name/string()"; }
    XmlRole { name: "_source"; query: "source/string()"; }
    XmlRole { name: "_favorited"; query: "favorited/string()"; }

    XmlRole { name: "_rts_name"; query: "retweeted_status/user/name/string()"; }
    XmlRole { name: "_rts_screen_name"; query: "retweeted_status/user/screen_name/string()"; }
    XmlRole { name: "_rts_text"; query: "retweeted_status/text/string()"; }
    XmlRole { name: "_rts_icon"; query: "retweeted_status/user/profile_image_url/string()";}
    XmlRole { name: "_rts_source"; query: "retweeted_status/source/string()"; }

    XmlRole { name: "_urls"; query: "entities/urls/string()"; }

    function clearData(){
        xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><status><created_at></created_at><id></id><text></text><source></source><truncated></truncated><favorited></favorited><in_reply_to_status_id></in_reply_to_status_id><in_reply_to_user_id></in_reply_to_user_id><in_reply_to_screen_name>IoriAYANE</in_reply_to_screen_name><retweet_count>0</retweet_count><retweeted></retweeted> -<user><id>69738495</id><name>陽炎　琥珀</name><screen_name>kalen_yuna</screen_name><location>夢の中から</location><description>物書きコスプレイヤー。 CosName：華煉　優奈　小説名：陽炎　琥珀です。宜しくお願いします！ ITな発言もします。 コスプレ／東方／アニメ／ゲーム／漫画／ラノベ／ネットワーク／サーバー／OS／プログラム フォローは自由ですがリムーブは一声ください。 ※注：定期POSTの回数が多いときは何かにかられてます。</description><profile_image_url>http://a2.twimg.com/profile_images/1267639525/39848931_2662049486_normal.jpg</profile_image_url><profile_image_url_https>https://si0.twimg.com/profile_images/1267639525/39848931_2662049486_normal.jpg</profile_image_url_https><url>http://ameblo.jp/hana-kage-novel/</url><protected></protected><followers_count>156</followers_count><profile_background_color>f2d3dd</profile_background_color><profile_text_color>544d49</profile_text_color><profile_link_color>b37187</profile_link_color><profile_sidebar_fill_color>e388a6</profile_sidebar_fill_color><profile_sidebar_border_color>cc6487</profile_sidebar_border_color><friends_count>195</friends_count><created_at>Sat Aug 29 00:30:40 +0000 2009</created_at><favourites_count>50</favourites_count><utc_offset>32400</utc_offset><time_zone>Tokyo</time_zone><profile_background_image_url>http://a1.twimg.com/images/themes/theme5/bg.gif</profile_background_image_url><profile_background_image_url_https>https://si0.twimg.com/images/themes/theme5/bg.gif</profile_background_image_url_https><profile_background_tile></profile_background_tile><profile_use_background_image></profile_use_background_image><notifications></notifications><geo_enabled></geo_enabled><verified></verified><following></following><statuses_count>39651</statuses_count><lang>ja</lang><contributors_enabled></contributors_enabled><follow_request_sent></follow_request_sent><listed_count></listed_count><show_all_inline_media></show_all_inline_media><default_profile></default_profile><default_profile_image></default_profile_image><is_translator></is_translator></user><geo/><coordinates/><place/><contributors/></status>";
        clear();
        hasMoreItem = true;
    }

    //最新のページを取得する
    function recent() {
        if(!isReady){
        }else if(startStatusId.length === 0){
        }else if(prevStartStatusId == startStatusId){
            //同じ場合は何もしない
        }else{
            // クリア
            clearData();
            //カウンタクリア
            inReplyCount = inReplyCountMax;
            //URL作成
            requestContent(startStatusId);
            //前回分を保存
            prevStartStatusId = startStatusId;
        }
    }

    //次のページを取得する
    function more() {
        if(!isReady){
        }else{
            //カウンタクリア
            inReplyCount = inReplyCountMax;
            // 取得
            getStatusFromEndItem();
        }
    }


    // 応答結果を指定する
    function response(text){
        xml = text;
        accessReady = true;
    }


    // 最後のアイテムをベースにアイテムを取得する
    function getStatusFromEndItem(){
        //データを取得
        var obj = get(count - 1);
        if(obj === null){
        }else if(obj === undefined){
        }else{
            Util.outputDebugString("finish append:" + obj._screen_name);

            //取得数をカウントダウン
            inReplyCount--;

            if(obj._in_reply_to_status_id.length > 0){
                if(inReplyCount <= 0){
                    // 終わりだけど次はある
                    hasMoreItem = true;
                }else {
                    //もう一回
                    requestContent(obj._in_reply_to_status_id);
                }
            }else{
                // 終わり
                hasMoreItem = false;
            }
        }
    }


    //TwitterのURLを取得する
    function requestContent(id){
        Util._isDebug = true;
        Util.outputDebugString("in reply to : " + id);

        if(!isReady && (inReplyCount < 0)){
            //処理中
            Util.outputDebugString("ModelTimeline::onSourceTimelineChanged: busy")
        }else{
            Util.outputDebugString("ModelTimeline::onSourceTimelineChanged: start access")
            //Readyを落とす
            accessReady = false;
            //つぶやき取得
            objTwitter.tweets.statusesShow(id, null, null, response);
        }

    }

    //xmlの展開終了
    onFinishAppend: {

        getStatusFromEndItem();
    }
}
